package com.xiyou.weblog.web.markdown;

import com.xiyou.weblog.web.markdown.provider.NofollowLinkAttributeProvider;
import com.xiyou.weblog.web.markdown.renderer.ImageNodeRenderer;
import org.commonmark.Extension;
import org.commonmark.ext.gfm.tables.TablesExtension;
import org.commonmark.ext.heading.anchor.HeadingAnchorExtension;
import org.commonmark.ext.image.attributes.ImageAttributesExtension;
import org.commonmark.ext.task.list.items.TaskListItemsExtension;
import org.commonmark.node.Node;
import org.commonmark.parser.Parser;
import org.commonmark.renderer.html.HtmlRenderer;

import java.util.List;

/**
 * @author xiyou
 * @description markdown 工具类
 */
public class MarkdownHelper {

    /**
     * Markdown 解析器
     */
    private final static Parser PARSER;

    /**
     * Html 渲染器
     */
    private final static HtmlRenderer HTML_RENDERER;

    /**
     * 初始化
     */
    static {
        // Markdown 拓展
        List<Extension> extensions = List.of(
                TablesExtension.create(), // 表格拓展
                HeadingAnchorExtension.create(), // 标题锚定项
                ImageAttributesExtension.create(), // 图片宽高
                TaskListItemsExtension.create() // 任务列表
        );
        PARSER = Parser.builder().extensions(extensions).build();
        HTML_RENDERER = HtmlRenderer.builder().extensions(extensions)
                .attributeProviderFactory(context -> new NofollowLinkAttributeProvider())
                .nodeRendererFactory(ImageNodeRenderer::new)
                .build();
    }

    /**
     * 将 Markdown 转换为 HTML
     */
    public static String convertMarkdownToHtml(String markdown) {
        Node document = PARSER.parse(markdown);
        return HTML_RENDERER.render(document);
    }

    public static void main(String[] args) {
//        String markdown = "This is *Sparta*";
//        默认情况下，该库是不支持 markdown 表格转换，
//        为了支持表格装换，官方提供了对应的拓展，我们需要手动添加该拓展。commonmark-ext-gfm-tables


/*        String markdown = "| First Header  | Second Header |\n" +
                "| ------------- | ------------- |\n" +
                "| Content Cell  | Content Cell  |\n" +
                "| Content Cell  | Content Cell  |";*/
/*        String markdown = "# 一级标题\n" +
                "## 二级标题\n";*/


//        String markdown = "![text](/url.png){width=640 height=480}";



/*        String markdown = "- [ ] task #1\n" +
                "- [x] task #2\n";*/

//        测试nofollow
/*        String markdown = "[个人网站域名](http://www.xiyou.com \"个人网站域名\")\n" +
                "\n" +
                "[第三方网站域名](http://www.baidu.com \"第三方网站域名\")";*/

        String markdown = "![图 1-1 技术栈](https://img.quanxiaoha.com/quanxiaoha/169560181378937 \"图 1-1 技术栈\")";
        System.out.println(MarkdownHelper.convertMarkdownToHtml(markdown));
    }
}
